<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">















 
 
 
 
 
 
 
  
  


<html>
  <head>
    <script type="text/javascript" language="JavaScript">
    ORIGINAL_PAGE_PATH = "/appengine/docs/whatisgoogleappengine.html";
    </script>
    
    
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>What Is Google App Engine? - Google App Engine - Google Code</title>
<script type="text/javascript"><!--
(function(){function a(){this.t={};this.tick=function(c){this.t[c]=(new Date).getTime()};this.tick("start")}var b=new a;window.jstiming={Timer:a,load:b};if(window.external&&window.external.pageT)window.jstiming.pt=window.external.pageT;})();

var _tocPath_ = '/appengine/docs/_toc.ezt';
var codesite_token = null;
//--></script>
<link href="../../css/codesite.pack.04102009.css" type="text/css" rel="stylesheet"></link>
<script src="../../js/codesite_head.pack.04102009.js" type="text/javascript"></script>
<script type="text/javascript">CODESITE_CSITimer['load'].tick('bhs');</script>
<link rel="search" type="application/opensearchdescription+xml" title="Google Code" href="http://code.google.com/osd.xml" />

<!--[if IE]><link rel="stylesheet" type="text/css" href="../../css/iehacks.css" /><![endif]-->

    <link href="../../css/semantic_headers.css" rel="stylesheet" type="text/css" />
    <link href="../css/local_extensions.css" rel="stylesheet" type="text/css" />
  </head>

  <body class="gc-documentation">

    
    
    
</a>

<div id="gb">
 <span>
  
    <a id="lang-dropdown" class="dropdown" href="http://code.google.com" onclick="return false;"><img class="globeicon" src="../../images/globe2_small.png"/><span>English</span></a>
  
 </span>
</div>

<div class="gbh" style="left: 0pt;"></div>
<div class="gbh" style="right: 0pt;"></div>


<style type="text/css">
  #gc-topnav h1 {
    padding: 0 0 0 6px;
  }
</style>


<div id="gc-container">
<a name="top"></a>
<div id="skipto">
  <a href="#gc-pagecontent">Skip to page content</a>
  <a href="#gc-toc">Skip to main navigation</a>
</div>

<div id="gc-header">
  <div id="logo"><a href="http://code.google.com">
  
  
     <img src="../../images/cleardot.gif" height="1px" width="1px" alt="Google Code Home Page" id="gc-logo-img"/>
  
  
  </a></div>
  <div id="search">
    <div id="searchForm" class="searchForm">
      <form id="cse" action="http://www.google.com/cse" accept-charset="utf-8" class="gsc-search-box" onsubmit="executeGSearch(document.getElementById('gsearchInput').value); return false;">
      <noscript>
      <input type="hidden" name="cref" value="http://code.google.com/cse/googlecode-context.xml"/>
      </noscript>
        <table class="gsc-search-box" cellpadding="0" cellspacing="0">
          <tbody>
            <tr>
              <td class="gsc-input">
                <input id="gsearchInput" type="text" name="q" maxlength="2048" class="gsc-input" autocomplete="off" title="Google Code Search" style="width:345px"/>
              </td>
              <td class="gsc-search-button">
                <div id="cs-searchresults" onclick="event.cancelBubble = true;"></div>
                <input title="Search" id="gsearchButton" class="gsc-search-button" name="sa" value="Search" type="submit"/>
              </td>
            </tr>
            <tr>
              <td colspan="2" class="greytext">e.g. "templates" or "datastore"</td>
            </tr>
          </tbody>
        </table>
      </form>
    </div> <!-- end searchForm -->
  </div> <!-- end search -->
</div> <!-- end gc-header -->


<div id="codesiteContent">

<a name="gc-topnav-anchor"></a>
<div id="gc-topnav">
  <h1>Google App Engine</h1>
  <ul id="docs" class="gc-topnav-tabs">

    <li id="home_link">
      <a href="../index.html" title="Google App Engine home page">Home</a>
    </li>
  
    <li id="docs_link">
      <a href="index.html" class="selected" title="Official Google App Engine documentation">Docs</a>
    </li>
  
    <li id="faq_link">
      <a href="../kb/index.html" title="Answers to frequently asked questions about Google App Engine">FAQ</a>
    </li>
  
    <li id="articles_link">
      <a href="../articles/index.html" title="Focused articles and tutorials for Google App Engine developers">Articles</a>
    </li>
  
    <li>
      <a href="http://googleappengine.blogspot.com/" title="Official Google App Engine blog">Blog</a>
    </li>
  
    <li>
      <a href="../community.html" title="Community home for Google App Engine">Community</a>
    </li>
  
    <li>
      <a href="../terms.html" title="Google App Engine terms of service">Terms</a>
    </li>
  
    <li>
      <a href="../downloads.html" title="Download Google App Engine">Download</a>
    </li>
  

  </ul>
</div> <!-- end gc-topnav -->

    <div class="g-section g-tpl-170">

      <div class="g-unit g-first" id="gc-toc">
        <ul>
  <li><a href="../downloads.html">Downloads</a></li>
  <li><a href="http://code.google.com/status/appengine">System Status</a></li>
  <li><a href="http://code.google.com/p/googleappengine/issues/list">Issue Tracker</a></li>
</ul>
<div class="line"></div>
<ul>
  <li><h2>Getting Started</h2>
    <ul>
      <li><a href="whatisgoogleappengine.html">What Is Google App Engine?</a></li>
      <li><a href="java/gettingstarted/index.html">Java</a>
        <ul>
              <li><a href="java/gettingstarted/introduction.html">Introduction</a></li>
    <li><a href="java/gettingstarted/installing.html">Installing the Java SDK</a></li>
    <li><a href="java/gettingstarted/creating.html">Creating a Project</a></li>
    <li><a href="java/gettingstarted/usingusers.html">Using the Users Service</a></li>
    <li><a href="java/gettingstarted/usingjsps.html">Using JSPs</a></li>
    <li><a href="java/gettingstarted/usingdatastore.html">Using the Datastore with JDO</a></li>
    <li><a href="java/gettingstarted/staticfiles.html">Using Static Files</a></li>
    <li><a href="java/gettingstarted/uploading.html">Uploading Your Application</a></li>

        </ul>
      </li>
      <li><a href="python/gettingstarted/index.html">Python</a>
        <ul>
            <li><a href="python/gettingstarted/introduction.html">Introduction</a></li>
  <li><a href="python/gettingstarted/devenvironment.html">The Development Environment</a></li>
  <li><a href="python/gettingstarted/helloworld.html">Hello, World!</a></li>
  <li><a href="python/gettingstarted/usingwebapp.html">Using the webapp Framework</a></li>
  <li><a href="python/gettingstarted/usingusers.html">Using the Users Service</a></li>
  <li><a href="python/gettingstarted/handlingforms.html">Handling Forms With webapp</a></li>
  <li><a href="python/gettingstarted/usingdatastore.html">Using the Datastore</a></li>
  <li><a href="python/gettingstarted/templates.html">Using Templates</a></li>
  <li><a href="python/gettingstarted/staticfiles.html">Using Static Files</a></li>
  <li><a href="python/gettingstarted/uploading.html">Uploading Your Application</a></li>

        </ul>
      </li>
    </ul>
  </li>
</ul>
<div class="line"></div>
<ul>
  <li><h2>Java <sup class="new">Early Look</sup></h2>
    <ul>
          <li><a href="java/overview.html">Overview</a></li>
    <li><a href="java/runtime.html">Servlet Environment</a></li>
    <li><a href="java/datastore/index.html">Storing Data</a>
      <ul>
            <li><a href="java/datastore/overview.html">Overview</a></li>
    <li><a href="java/datastore/usingjdo.html">Using JDO</a></li>
    <li><a href="java/datastore/dataclasses.html">Defining Data Classes</a></li>
    <li><a href="java/datastore/creatinggettinganddeletingdata.html">Creating, Getting and Deleting Data</a></li>
    <li><a href="java/datastore/queriesandindexes.html">Queries and Indexes</a></li>
    <li><a href="java/datastore/transactions.html">Transactions</a></li>
    <li><a href="java/datastore/relationships.html">Relationships</a></li>
    <li><a href="java/datastore/usingjpa.html">Using JPA</a></li>
    <li><a href="java/javadoc/com/google/appengine/api/datastore/package-summary.html">Low-level API</a></li>

      </ul>
    </li>
    <li><a href="java/apis.html">Services</a>
      <ul>
        <li><a href="java/memcache/index.html">Memcache</a>
          <ul>
                <li><a href="java/memcache/overview.html">Overview</a></li>
    <li><a href="java/memcache/usingjcache.html">Using JCache</a></li>
    <li><a href="java/javadoc/com/google/appengine/api/memcache/package-summary.html">Low-level API</a></li>

          </ul>
        </li>
        <li><a href="java/urlfetch/index.html">URL Fetch</a>
          <ul>
                <li><a href="java/urlfetch/overview.html">Overview</a></li>
    <li><a href="java/urlfetch/usingjavanet.html">Using java.net</a></li>
    <li><a href="java/javadoc/com/google/appengine/api/urlfetch/package-summary.html">Low-level API</a></li>

          </ul>
        </li>
        <li><a href="java/mail/index.html">Mail</a>
          <ul>
                <li><a href="java/mail/overview.html">Overview</a></li>
    <li><a href="java/mail/usingjavamail.html">Using JavaMail</a></li>
    <li><a href="java/javadoc/com/google/appengine/api/mail/package-summary.html">Low-level API</a></li>

          </ul>
        </li>
        <li><a href="java/images/index.html">Images</a>
          <ul>
                <li><a href="java/images/overview.html">Overview</a></li>
    <li><a href="java/javadoc/com/google/appengine/api/images/package-summary.html">API Reference</a></li>

          </ul>
        </li>
        <li><a href="java/users/index.html">Google Accounts</a>
          <ul>
                <li><a href="java/users/overview.html">Overview</a></li>
    <li><a href="java/javadoc/com/google/appengine/api/users/package-summary.html">API Reference</a></li>

          </ul>
        </li>
      </ul>
    </li>
    <li><a href="java/javadoc/index.html">Javadoc Reference</a></li>
    <li><a href="java/jrewhitelist.html">JRE Class White List</a></li>
    <li><a href="java/config/index.html">Configuration</a>
      <ul>
            <li><a href="java/config/webxml.html">Deployment Descriptor</a></li>
    <li><a href="java/config/appconfig.html">App Config</a></li>
    <li><a href="java/config/indexconfig.html">Index Config</a></li>
    <li><a href="java/config/cron.html">Scheduled Tasks</a></li>

      </ul>
    </li>
    <li><a href="java/tools/index.html">Tools</a>
      <ul>
            <li><a href="java/tools/devserver.html">Development Server</a></li>
    <li><a href="java/tools/uploadinganapp.html">Uploading and Managing</a></li>
    <li><a href="java/tools/eclipse.html">Google Plugin for Eclipse</a></li>
    <li><a href="java/tools/ant.html">Using Apache Ant</a></li>

      </ul>
    </li>
    <li><a href="java/howto/index.html">How-To</a>
      <ul>
              <li><a href="java/howto/unittesting.html">Unit Testing</a></li>

      </ul>
    </li>

    </ul>
  </li>
</ul>
<div class="line"></div>
<ul>
  <li><h2>Python</h2>
    <ul>
          <li><a href="python/overview.html">Overview</a></li>
    <li><a href="python/runtime.html">CGI Environment</a></li>
    <li><a href="python/datastore/index.html">Storing Data</a>
      <ul>
             <li><a href="python/datastore/overview.html">Overview</a></li>
     <li><a href="python/datastore/entitiesandmodels.html">Entities and Models</a></li>
     <li><a href="python/datastore/creatinggettinganddeletingdata.html">Creating, Getting and Deleting Data</a></li>
     <li><a href="python/datastore/keysandentitygroups.html">Keys and Entity Groups</a></li>
     <li><a href="python/datastore/queriesandindexes.html">Queries and Indexes</a></li>
     <li><a href="python/datastore/transactions.html">Transactions</a></li>
     <li><a href="python/datastore/typesandpropertyclasses.html">Types and Property Classes</a></li>
     <li><a href="python/datastore/gqlreference.html">GQL Reference</a></li>

     <li><span class="tlw-title tlw-expanded">Reference</span>
       <ul>
         <li><a href="python/datastore/modelclass.html">Model</a></li>
         <li><a href="python/datastore/expandoclass.html">Expando</a></li>
         <li><a href="python/datastore/polymodelclass.html">PolyModel</a></li>
         <li><a href="python/datastore/propertyclass.html">Property</a></li>
         <li><a href="python/datastore/queryclass.html">Query</a></li>
         <li><a href="python/datastore/gqlqueryclass.html">GqlQuery</a></li>
         <li><a href="python/datastore/keyclass.html">Key</a></li>
         <li><a href="python/datastore/functions.html">Functions</a></li>
         <li><a href="python/datastore/exceptions.html">Exceptions</a></li>
       </ul>
     </li>

      </ul>
    </li>
    <li><a href="python/apis.html">Services</a>
      <ul>
        <li><a href="python/memcache/index.html">Memcache</a>
          <ul>
                 <li><a href="python/memcache/overview.html">Overview</a></li>
      <li><a href="python/memcache/usingmemcache.html">Using Memcache</a></li>
     <li><span class="tlw-title tlw-expanded">Reference</span>
       <ul>
         <li><a href="python/memcache/clientclass.html">Client</a></li>
         <li><a href="python/memcache/functions.html">Functions</a></li>
       </ul>
     </li>

          </ul>
        </li>
        <li><a href="python/urlfetch/index.html">URL Fetch</a>
          <ul>
                 <li><a href="python/urlfetch/overview.html">Overview</a></li>
     <li><span class="tlw-title tlw-expanded">Reference</span>
       <ul>
         <li><a href="python/urlfetch/fetchfunction.html">The fetch Function</a></li>
         <li><a href="python/urlfetch/responseobjects.html">Response Objects</a></li>
         <li><a href="python/urlfetch/exceptions.html">Exceptions</a></li>
       </ul>
     </li>

          </ul>
        </li>
        <li><a href="python/mail/index.html">Mail</a>
          <ul>
                 <li><a href="python/mail/overview.html">Overview</a></li>
     <li><a href="python/mail/sendingmail.html">Sending Mail</a></li>
     <li><a href="python/mail/attachments.html">Attachments</a></li>
     <li><span class="tlw-title tlw-expanded">Reference</span>
       <ul>
         <li><a href="python/mail/emailmessageclass.html">EmailMessage</a></li>
         <li><a href="python/mail/emailmessagefields.html">Message Fields</a></li>
         <li><a href="python/mail/functions.html">Functions</a></li>
         <li><a href="python/mail/exceptions.html">Exceptions</a></li>
       </ul>
     </li>

          </ul>
        </li>
        <li><a href="python/images/index.html">Images</a>
          <ul>
                 <li><a href="python/images/overview.html">Overview</a></li>
     <li><a href="python/images/installingPIL.html">Installing PIL</a></li>
     <li><a href="python/images/usingimages.html">Using the Images API</a></li>
     <li><span class="tlw-title tlw-expanded">Reference</span>
       <ul>
         <li><a href="python/images/imageclass.html">Image</a></li>
         <li><a href="python/images/functions.html">Functions</a></li>
         <li><a href="python/images/exceptions.html">Exceptions</a></li>
       </ul>
     </li>

          </ul>
        </li>
        <li><a href="python/users/index.html">Google Accounts</a>
          <ul>
                 <li><a href="python/users/overview.html">Overview</a></li>
     <li><a href="python/users/userobjects.html">User Objects</a></li>
     <li><a href="python/users/loginurls.html">Login URLs</a></li>
     <li><a href="python/users/adminusers.html">Admin Users</a></li>

     <li><span class="tlw-title tlw-expanded">Reference</span>
       <ul>
         <li><a href="python/users/userclass.html">User</a></li>
         <li><a href="python/users/functions.html">Functions</a></li>
         <li><a href="python/users/exceptions.html">Exceptions</a></li>
       </ul>
     </li>

          </ul>
        </li>
      </ul>
    </li>
    <li><a href="python/config/index.html">Configuration</a>
      <ul>
            <li><a href="python/config/appconfig.html">App Config</a></li>
    <li><a href="python/config/indexconfig.html">Index Config</a></li>
    <li><a href="python/config/cron.html">Scheduled Tasks</a></li>

      </ul>
    </li>
    <li><a href="python/tools/index.html">Tools</a>
      <ul>
            <li><a href="python/tools/devserver.html">Development Server</a></li>
    <li><a href="python/tools/uploadinganapp.html">Uploading and Managing</a></li>
    <li><a href="python/tools/uploadingdata.html">Uploading Data</a></li>
    <li><a href="python/tools/webapp/index.html">webapp Framework</a>
      <ul>
             <li><a href="python/tools/webapp/overview.html">Overview</a></li>
     <li><a href="python/tools/webapp/running.html">Running the Application</a></li>
     <li><a href="python/tools/webapp/requesthandlers.html">Request Handlers</a></li>
     <li><a href="python/tools/webapp/requestdata.html">Request Data</a></li>
     <li><a href="python/tools/webapp/buildingtheresponse.html">Building the Response</a></li>
     <li><a href="python/tools/webapp/redirects.html">Redirects, Headers and Status Codes</a></li>
     

     <li><span class="tlw-title tlw-expanded">Reference</span>
       <ul>
         <li><a href="python/tools/webapp/requestclass.html">Request</a></li>
         <li><a href="python/tools/webapp/responseclass.html">Response</a></li>
         <li><a href="python/tools/webapp/requesthandlerclass.html">RequestHandler</a></li>
         <li><a href="python/tools/webapp/wsgiapplicationclass.html">WSGIApplication</a></li>
         <li><a href="python/tools/webapp/utilmodule.html">Utility Functions</a></li>
         
       </ul>
     </li>

      </ul>
    </li>
    <li><a href="python/tools/libraries.html">Third-party Libraries</a></li>

      </ul>
    </li>
    <li><a href="python/howto/index.html">How-To</a>
      <ul>
              <li><a href="python/howto/usinggdataservices.html">Google Data Services</a></li>

      </ul>
    </li>

    </ul>
  </li>
</ul>
<div class="line"></div>
<ul>
  <li><h2>Managing Your App</h2>
    <ul>
      <li><a href="theadminconsole.html">The Admin Console</a></li>
      <li><a href="quotas.html">Quotas</a></li>
      <li><a href="billing.html">Billing</a></li>
    </ul>
  </li>
</ul>
<div class="line"></div>
<ul>
  <li><h2>Resources</h2>
    <ul>
      <li><a href="../kb/index.html">FAQ</a></li>
      <li><a href="../articles/index.html">Articles</a></li>
      <li><a href="http://appengine-cookbook.appspot.com/">Cookbook</a></li>
      <li><a href="http://appgallery.appspot.com/">App Gallery</a></li>
      <li><a href="http://code.google.com/p/googleappengine/">SDK Code</a></li>
      <li><a href="http://code.google.com/p/google-app-engine-samples/">Sample Apps Code</a></li>
      <li><a href="../community.html">Discussion Groups</a></li>
    </ul>
  </li>
</ul>
<div class="line"></div>
<ul>
  <li><a href="roadmap.html">Product Roadmap</a></li>
  <li><a href="http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes">Release Notes</a></li>
  <li><a href="revision_history.html">Revision History</a></li>
</ul>

        <a class="hidden" href="#gc-topnav-anchor">More Google App Engine resource links</a>
      </div>

      <div class="g-unit" id="gc-pagecontent">
        <h1 class="page_title">What Is Google App Engine?</h1>



<p>Google App Engine lets you run your web applications on Google's infrastructure.  App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow.  With App Engine, there are no servers to maintain: You just upload your application, and it's ready to serve your users.</p>

<p>You can serve your app from your own domain name (such as <code>http://www.example.com/</code>) using <a href="http://www.google.com/a/">Google Apps</a>.  Or, you can serve your app using a free name on the <code>appspot.com</code> domain.  You can share your application with the world, or limit access to members of your organization.</p>

<p>Google App Engine supports apps written in several programming languages.  With App Engine's Java runtime environment, you can build your app using standard Java technologies, including the JVM, Java servlets, and the Java programming language&mdash;or any other language using a JVM-based interpreter or compiler, such as JavaScript or Ruby.  App Engine also features a dedicated Python runtime environment, which includes a fast Python interpreter and the Python standard library.  The Java and Python runtime environments are built to ensure that your application runs quickly, securely, and without interference from other apps on the system.</p>

<p>With App Engine, you only pay for what you use.  There are no set-up costs and no recurring fees.  The resources your application uses, such as storage and bandwidth, are measured by the gigabyte, and billed at competitive rates.  You control the maximum amounts of resources your app can consume, so it always stays within your budget.</p>

<p>App Engine costs nothing to get started.  All applications can use up to 500 MB of storage and enough CPU and bandwidth to support an efficient app serving around 5 million page views a month, absolutely free.  When you enable billing for your application, your free limits are raised, and you only pay for resources you use above the free levels.</p>


<h2 id="The_Application_Environment">The Application Environment</h2>

<p>Google App Engine makes it easy to build an application that runs reliably, even under heavy load and with large amounts of data.  App Engine includes the following features:</p>

<ul>
  <li>dynamic web serving, with full support for common web technologies</li>
  <li>persistent storage with queries, sorting and transactions</li>
  <li>automatic scaling and load balancing</li>
  <li>APIs for authenticating users and sending email using Google Accounts</li>
  <li>a fully featured local development environment that simulates Google App Engine on your computer</li>
  <li>scheduled tasks for triggering events at specified times and regular intervals</li>
</ul>

<p>Your application can run in one of two runtime environments: the <a href="http://java.sun.com/">Java</a> environment, and the <a href="http://www.python.org/">Python</a> environment.  Each environment provides standard protocols and common technologies for web application development.</p>



<h3>The Sandbox</h3>

<p>Applications run in a secure environment that provides limited access to the underlying operating system.  These limitations allow App Engine to distribute web requests for the application across multiple servers, and start and stop servers to meet traffic demands.  The sandbox isolates your application in its own secure, reliable environment that is independent of the hardware, operating system and physical location of the web server.</p>  

<p>Examples of the limitations of the secure sandbox environment include:<p>

<ul>
  <li>An application can only access other computers on the Internet through the provided URL fetch and email services.  Other computers can only connect to the application by making HTTP (or HTTPS) requests on the standard ports.</li>
  <li>An application cannot write to the file system.  An app can read files, but only files uploaded with the application code.  The app must use the App Engine datastore, memcache or other services for all data that persists between requests.</li>
  <li>Application code only runs in response to a web request or a cron job, and must return response data within 30 seconds in any case.  A request handler cannot spawn a sub-process or execute code after the response has been sent.</li>
</ul>


<h3>The Java Runtime Environment</h3>

<p>You can develop your application for the Java runtime environment using common Java web development tools and API standards.  Your app interacts with the environment using <a href="http://java.sun.com/products/servlet/">the Java Servlet standard</a>, and can use common web application technologies such as <a href="http://java.sun.com/products/jsp/">JavaServer Pages</a> (JSPs).</p>

<p>The Java runtime environment uses Java 6.  The App Engine Java SDK supports developing apps using either Java 5 or 6.</p>

<p>The environment includes the <a href="http://java.sun.com/javase/technologies/index.jsp">Java SE Runtime Environment (JRE) 6 platform</a> and libraries.  The restrictions of the sandbox environment are implemented in the JVM.  An app can use any JVM bytecode or library feature, as long as it does not exceed the sandbox restrictions.  For instance, bytecode that attempts to open a socket or write to a file will throw a runtime exception.</p>

<p>Your app accesses most App Engine services using Java standard APIs.  For the App Engine datastore, the Java SDK includes implementations of the <a href="http://java.sun.com/jdo/index.jsp">Java Data Objects</a> (JDO) and <a href="http://java.sun.com/developer/technicalArticles/J2EE/jpa/">Java Persistence API</a> (JPA) interfaces.  Your app can use <a href="http://java.sun.com/products/javamail/">the JavaMail API</a> to send email messages with the App Engine Mail service.  The <code>java.net</code> HTTP APIs access the App Engine URL fetch service.  App Engine also includes low-level APIs for its services to implement additional adapters, or to use directly from the application.  See the documentation for <a href="java/datastore/index.html">the datastore</a>, <a href="java/memcache/index.html">memcache</a>, <a href="java/urlfetch/index.html">URL fetch</a>, <a href="java/mail/index.html">mail</a>, <a href="java/images/index.html">images</a> and <a href="java/users/index.html">Google Accounts</a> APIs.</p>

<p>Typically, Java developers use the Java programming language and APIs to implement web applications for the JVM.  With the use of JVM-compatible compilers or interpreters, you can also use other languages to develop web applications, such as JavaScript, Ruby, or Scala.</p>

<p>For more information about the Java runtime environment, see <a href="java/runtime.html">The Java Runtime Environment</a>.</p>


<h3>The Python Runtime Environment</h3>

<p>With App Engine's Python runtime environment, you can implement your app using the Python programming language, and run it on an optimized Python interpreter.  App Engine includes rich APIs and tools for Python web application development, including a feature rich data modeling API, an easy-to-use web application framework, and tools for managing and accessing your app's data.  You can also take advantage of a wide variety of mature libraries and frameworks for Python web application development, such as <a href="http://www.djangoproject.com/">Django</a>.</p>

<p>The Python runtime environment uses Python version 2.5.2.  Additional support for Python 3 is being considered for a future release.</p>

<p>The Python environment includes <a href="http://docs.python.org/lib/lib.html">the Python standard library</a>.  Of course, not all of the library's features can run in the sandbox environment.  For instance, a call to a method that attempts to open a socket or write to a file will raise an exception.  For convenience, several modules in the standard library whose core features are not supported by the runtime environment have been disabled, and code that imports them will raise an error.</p>

<p>Application code written for the Python environment must be written exclusively in Python.  Extensions written in the C language are not supported.</p>

<p>The Python environment provides rich Python APIs for <a href="python/datastore/index.html">the datastore</a>, <a href="python/users/index.html">Google Accounts</a>, <a href="python/urlfetch/index.html">URL fetch</a> and <a href="python/mail/index.html">email</a> services.  App Engine also provides a simple Python web application framework called <a href="python/tools/webapp/index.html">webapp</a> to make it easy to start building applications.</p>

<p>You can upload other third-party libraries with your application, as long as they are implemented in pure Python and do not require any unsupported standard library modules.</p>

<p>For more information about the Python runtime environment, see <a href="python/runtime.html">The Python Runtime Environment</a>.</p>


<h3>The Datastore</h3>

<p>App Engine provides a powerful distributed data storage service that features a query engine and transactions.  Just as the distributed web server grows with your traffic, the distributed datastore grows with your data.</p>

<p>The App Engine datastore is not like a traditional relational database.  Data objects, or "entities," have a kind and a set of properties.  Queries can retrieve entities of a given kind filtered and sorted by the values of the properties.  Property values can be of any of the supported <a href="python/datastore/typesandpropertyclasses.html">property value types</a>.</p>

<p>Datastore entities are "schemaless."  The structure of data entities is provided by and enforced by your application code.  The Java JDO/JPA interfaces and the Python datastore interface include features for applying and enforcing structure within your app.  Your app can also access the datastore directly to apply as much or as little structure as it needs.</p>

<p>The datastore is strongly <a href="http://en.wikipedia.org/wiki/Consistency_model">consistent</a> and uses <a href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control">optimistic concurrency control</a>.  An update of a entity occurs in a transaction that is retried a fixed number of times if other processes are trying to update the same entity simultaneously.  Your application can execute multiple datastore operations in a single transaction which either all succeed or all fail, ensuring the integrity of your data.</p>

<p>The datastore implements transactions across its distributed network using "entity groups."  A transaction manipulates entities within a single group.  Entities of the same group are stored together for efficient execution of transactions.  Your application can assign entities to groups when the entities are created.</p>


<h3>Google Accounts</h3>

<p>App Engine supports integrating an app with Google Accounts for user authentication.  Your application can allow a user to sign in with a Google account, and access the email address and displayable name associated with the account.  Using Google Accounts lets the user start using your application faster, because the user may not need to create a new account.  It also saves you the effort of implementing a user account system just for your application.</p>

<p>If your application is running under Google Apps, it can use the same features with members of your organization and Google Apps accounts.</p>

<p>The Users API can also tell the application whether the current user is a registered administrator for the application.  This makes it easy to implement admin-only areas of your site.</p>

<p>For more information about integrating with Google Accounts, see <a href="python/users/index.html">the Users API reference</a>.</p>


<h3>App Engine Services</h3>

<p>App Engine provides a variety of services that enable you to perform common operations when managing your application. The following APIs are provided to access these services:</p>

<h4>URL Fetch</h4>
<p>Applications can access resources on the Internet, such as web services or other data, using App Engine's URL fetch service.  The URL fetch service retrieves web resources using the same high-speed Google infrastructure that retrieves web pages for many other Google products.</p>

<h4>Mail</h4>
<p>Applications can send email messages using App Engine's mail service.  The mail service uses Google infrastructure to send email messages.</p>

<h4>Memcache</h4>
<p>The Memcache service provides your application with a high performance in-memory key-value cache that is accessible by multiple instances of your application.  Memcache is useful for data that does not need the persistence and transactional features of the datastore, such as temporary data or data copied from the datastore to the cache for high speed access.</p>

<h4>Image Manipulation</h4>
<p>The Image service lets your application manipulate images.  With this API, you can resize, crop, rotate and flip images in JPEG and PNG formats.</p>

<h3>Scheduled Tasks</h3>
<p>The Cron Service allows you to schedule tasks to run at regular intervals. For more information on this see the <a href="python/config/cron.html">Python</a> or <a href="java/config/cron.html">Java</a> cron documentation.</p>

<h2>Development Workflow</h2>

<p><a href="../downloads.html">The App Engine software development kits</a> (SDKs) for Java and Python each include a web server application that emulates all of the App Engine services on your local computer.  Each SDK includes all of the APIs and libraries available on App Engine.  The web server also simulates the secure sandbox environment, including checks for attempts to access system resources disallowed in the App Engine runtime environment.</p>

<p>Each SDK also includes a tool to upload your application to App Engine.  Once you have created your application's code, static files and configuration files, you run the tool to upload the data.  The tool prompts you for your Google account email address and password.</p>

<p>When you build a new major release of an application that is already running on App Engine, you can upload the new release as a new version.  The old version will continue to serve users until you switch to the new version.  You can test the new version on App Engine while the old version is still running.</p>

<p>The Java SDK runs on any platform with Java 5 or Java 6.  The SDK is available as a Zip file.  If you use the Eclipse development environment, you can use the <a href="java/tools/eclipse.html">Google Plugin for Eclipse</a> to create, test and upload App Engine applications.  The SDK also includes command-line tools for running the development server and uploading your app.</p>

<p>The Python SDK is implemented in pure Python, and runs on any platform with Python 2.5, including Windows, Mac OS X and Linux.  The SDK is available as a Zip file, and installers are available for Windows and Mac OS X.</p>

<p><a href="theadminconsole.html">The Administration Console</a> is the web-based interface for managing your applications running on App Engine.  You can use it to create new applications, configure domain names, change which version of your application is live, examine access and error logs, and browse an application's datastore.</p>


<h2>Quotas and Limits</h2>

<p>Not only is creating an App Engine application easy, it's free!  You can create an account and publish an application that people can use right away at no charge, and with no obligation.  An application on a free account can use up to 500MB of storage and up to 5 million page views a month.  When you are ready for more, you can enable billing, set a maximum daily budget, and allocate your budget for each resource according to your needs.</p>

<p>You can register up to 10 applications per developer account.</p>

<p>Each app is allocated resources within limits, or "quotas."  A quota determines how much of a given resource an app can use during a calendar day.  In the near future, you will be able to adjust some of these quotas by purchasing additional resources.</p>

<p>Some features impose limits unrelated to quotas to protect the stability of the system.  For example, when an application is called to serve a web request, it must issue a response within 30 seconds.  If the application takes too long, the process is terminated and the server returns an error code to the user.  The request timeout is dynamic, and may be shortened if a request handler reaches its timeout frequently to conserve resources.</p>

<p>Another example of a service limit is the number of results returned by a query.  A query can return at most 1,000 results.  Queries that would return more results only return the maximum.  In this case, a request that performs such a query isn't likely to return a request before the timeout, but the limit is in place to conserve resources on the datastore.</p>

<p>Attempts to subvert or abuse quotas, such as by operating applications on multiple accounts that work in tandem, are a violation of the <a href="../terms.html">Terms of Service</a>, and could result in apps being disabled or accounts being closed.</p>

<p>For a list of quotas and an explanation of the quota system, including which quotas can be increased by enabling billing, see <a href="quotas.html">Quotas</a>.</p>


<h2>For More Information...</h2>

<p>For more information about Google App Engine:</p>

<ul>
  <li><a href="http://www.youtube.com/watch?v=3Ztr-HhWX1c">Watch the Campfire One video</a> or <a href="../articles/cf1-text.html">read the transcript</a>.</li>
  <li><a href="http://www.youtube.com/watch?v=bfgO-LXGpTM">Watch the App Engine demo video</a>.</li>
  <li><a href="../downloads.html">Download the SDK</a>, <a href="http://appengine.google.com/">sign up for an account</a>, then read the <a href="python/gettingstarted/index.html">Getting Started Guide</a> and do the tutorial.</li>
  <li>Browse the <a href="http://appgallery.appspot.com/">App Gallery</a> for examples of applications built with App Engine.</li>
  <li>Check out <a href="index.html">the rest of the App Engine documentation</a>.</li>
</ul>

<p>Welcome to Google App Engine!</p>



      </div><!-- end gc-pagecontent -->
   </div><!-- end gooey wrapper -->

    </div> <!-- end codesite content -->

<div id="gc-footer" dir="ltr">
  <div class="text">
    
      <div class="notice"><div id="notice" style="text-align: center; border: 1em 0em 1em 0em">
  Except as otherwise <a
  href="http://code.google.com/policies.html#restrictions">noted</a>,
  the content of this page is licensed under the <a rel="license"
  href="http://creativecommons.org/licenses/by/2.5/">Creative Commons
  Attribution 2.5 License</a>, and code samples are licensed under the
  <a rel="license" href="http://www.apache.org/licenses/LICENSE-2.0">Apache
  2.0 License</a>.
<!-- <rdf:RDF xmlns="http://web.resource.org/cc/" 
              xmlns:dc="http://purl.org/dc/elements/1.1/"
              xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <Work rdf:about="">
    <license rdf:resource="http://creativecommons.org/licenses/by/2.5/" />
  </Work>
  <License rdf:about="http://creativecommons.org/licenses/by/2.5/">
    <permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
    <permits rdf:resource="http://web.resource.org/cc/Distribution"/>
    <requires rdf:resource="http://web.resource.org/cc/Notice"/>
    <requires rdf:resource="http://web.resource.org/cc/Attribution"/>
    <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
  </License>
</rdf:RDF> -->
</div>
Java is a registered trademark of Sun Microsystems, Inc.</div>
    
    &copy;2009 Google -
    <a href="http://code.google.com">Code Home</a> -
    <a href="http://www.google.com/accounts/TOS">Terms of Service</a> -
    <a href="http://www.google.com/privacy.html">Privacy Policy</a> -
    <a href="http://code.google.com/more">Site Directory</a>
    <br /> <br />
    Google Code offered in:
    <a href="http://code.google.com/intl/en">English</a> -
    <a href="http://code.google.com/intl/es">Español</a> -
    <a href="http://code.google.com/intl/ja">日本語</a> -
    <a href="http://code.google.com/intl/ko">한국어</a> -
    <a href="http://code.google.com/intl/pt-BR">Português</a> -
    <a href="http://code.google.com/intl/ru">Pусский</a> -
    <a href="http://code.google.com/intl/zh-CN">中文(简体)</a> -
    <a href="http://code.google.com/intl/zh-TW">中文(繁體)</a>
  </div>
</div><!-- end gc-footer -->

</div><!-- end gc-containter -->

<script type="text/javascript">CODESITE_CSITimer['load'].tick('ats');</script>
<script src="../../js/codesite_tail.pack.04102009.js" type="text/javascript"></script>






  </body>
</html>


